import type { BaseEnum } from "@/enums/base";

/**
 * 审批状态枚举
 * 用于标识审批流程中的各种状态
 */
export const ReviewStatus = {
  /**
   * 等待审批
   */
  None: {
    code: "None",
    name: "等待审批",
    index: 0,
    description: "等待审批，尚未开始审批流程"
  },

  /**
   * 审批通过
   */
  Approved: {
    code: "Approved",
    name: "审批通过",
    index: 2,
    description: "审批已通过，可以继续后续流程"
  },

  /**
   * 审批拒绝
   */
  Rejected: {
    code: "Rejected",
    name: "审批拒绝",
    index: 3,
    description: "审批被拒绝，需要重新申请或修改"
  },
} as const;

/**
 * 根据code获取枚举
 * @param code
 * @returns 枚举值或null
 */
export function matchCode(code: string) {
  return (
    Object.values(ReviewStatus).find((item) => item.code === code) || null
  );
}

/**
 * 根据index获取枚举
 * @param index
 * @returns 枚举值或null
 */
export function matchIndex(index: number) {
  return (
    Object.values(ReviewStatus).find((item) => item.index === index) || null
  );
}

/**
 * 获取所有审批状态选项
 * @returns 审批状态数组
 */
export function getReviewStatusOptions() {
  return Object.values(ReviewStatus);
}

/**
 * 判断是否为等待审批状态
 * @param reviewStatus 审批状态枚举值
 * @returns boolean
 */
export function isNone(reviewStatus: typeof ReviewStatus[keyof typeof ReviewStatus]): boolean {
  return reviewStatus.code === ReviewStatus.None.code;
}

/**
 * 判断是否为审批通过状态
 * @param reviewStatus 审批状态枚举值
 * @returns boolean
 */
export function isApproved(reviewStatus: typeof ReviewStatus[keyof typeof ReviewStatus]): boolean {
  return reviewStatus.code === ReviewStatus.Approved.code;
}

/**
 * 判断是否为审批拒绝状态
 * @param reviewStatus 审批状态枚举值
 * @returns boolean
 */
export function isRejected(reviewStatus: typeof ReviewStatus[keyof typeof ReviewStatus]): boolean {
  return reviewStatus.code === ReviewStatus.Rejected.code;
}

/**
 * 获取审批状态的颜色类型（用于UI展示）
 * @param reviewStatus 审批状态枚举值
 * @returns Element Plus 的 tag 类型
 */
export function getReviewStatusColor(reviewStatus: typeof ReviewStatus[keyof typeof ReviewStatus]): 'info' | 'success' | 'danger' {
  switch (reviewStatus.code) {
    case ReviewStatus.None.code:
      return 'info';      // 等待审批 - 信息色
    case ReviewStatus.Approved.code:
      return 'success';   // 审批通过 - 成功色
    case ReviewStatus.Rejected.code:
      return 'danger';    // 审批拒绝 - 危险色
    default:
      return 'info';
  }
}

/**
 * 获取审批状态的图标（用于UI展示）
 * @param reviewStatus 审批状态枚举值
 * @returns 图标名称
 */
export function getReviewStatusIcon(reviewStatus: typeof ReviewStatus[keyof typeof ReviewStatus]): string {
  switch (reviewStatus.code) {
    case ReviewStatus.None.code:
      return 'Clock';         // 等待审批 - 时钟图标
    case ReviewStatus.Approved.code:
      return 'Select';        // 审批通过 - 勾选图标
    case ReviewStatus.Rejected.code:
      return 'CloseBold';     // 审批拒绝 - 叉号图标
    default:
      return 'Clock';
  }
}
